# coding utf-8

# range() 方法可创建一个整数列表对象，一般用在 for 循环中
for num in range(1, 5):
    print(num)

# 列表推导式  格式: [表达式 for 变量 in 列表 if 条件]
li = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print([x ** 2 for x in li])
print([x ** 2 for x in li if x > 5])
print(dict([(x, x * 10) for x in li]))
print([num for num in range(1, 5) if num % 2 == 1])

# 匿名函数 格式: lambda [形参1], [形参2], ... : [单行表达式] 或 [函数调用]
f = lambda a: a * a
# 4
print('匿名函数执行结果', f(2))

# del删除列表元素 格式: del 列表[索引]
del li[3]
print('删除下标为3的元素', li)

# enumerate 同时遍历列表的索引和值
for _index, _value in enumerate(li):
    print(f'索引：{_index},数值：{_value}')

# 将容器变量转为字符串
_li_str = str(li)
print(type(_li_str), _li_str)

# 佛系函数, 将传入的字符串内容，按格式转换为对应的容器类型。
_li = eval(_li_str)
print(type(_li), _li)

# 例1：计算每个字符在字符串里面的个数
word = "letters"
count = {letter: word.count(letter) for letter in word}
print('统计每个字符的个数:', count)

# 例2：key value 值交换
d = {
    "a": "b",
    "c": "d",
    "e": "f"
}
d_result = {value: key for key, value in d.items()}
print('key value 值交换', d_result)


# 给出一个数字 ，如果是1就是['*'],如果是2就是[' * ','***']
def tower_builder(m):
    return list(map(lambda x: ("*" * (2 * x + 1)).center(2 * m - 1), range(0, m)))


_list = tower_builder(5)
for v in _list:
    print(v)
